﻿
///*
// * 使用时请添加对类库 MySql.Data.dll 的引用
// */
//using System;
//using System.Data;
//using System.Data.Common;
//using MySql.Data.MySqlClient;

//using Light.BaseFramework.Contract;

//namespace Light.BaseFramework.DbHelper
//{
//    /// <summary>
//    /// 基于SQL Server的通用数据访问层
//    /// </summary>
//    /// 
//    public class MySqlHelper : ISqlHelper
//    {


//        #region 数据库连接字符串

//        /// <summary>
//        /// 数据库连接字符串
//        /// </summary>
//        private string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[0].ToString();

//        public string ConnectionString
//        {
//            get { return connectionString; }
//            set { connectionString = value; }
//        }


//        #endregion


//        #region ExecuteNonQuery

//        /// <summary>
//        /// 在使用存储过程需要添加参数的情况下使用本方法执行Sql命令
//        /// </summary>
//        /// <param name="cmdType">命令类型，可以选择：(stored procedure, text)</param>
//        /// <param name="cmdText">存储过程名</param>
//        /// <param name="commandParameters">参数集合</param>
//        /// <returns>返还受影响的行数</returns>
//        public int ExecuteNonQuery(CommandType cmdType, string cmdText, params IDataParameter[] cmdParms)
//        {

//            using (MySqlCommand cmd = new MySqlCommand())
//            {
//                PrepareCommand(cmd, null, cmdType, cmdText, cmdParms);
//                try
//                {
//                    int val = cmd.ExecuteNonQuery();
//                    cmd.Parameters.Clear();
//                    //cmd.Connection.Close();
//                    //cmd.Connection.Dispose();
//                    return val;
//                }
//                catch (Exception ex)
//                {

//                    throw ex;
//                }

//            }
//        }

//        /// <summary>
//        /// 执行事务
//        /// </summary>
//        /// <param name="trans">MySqlTransaction对象</param>
//        /// <param name="cmdType">命令类型（存储过程或SQL语句）</param>
//        /// <param name="cmdText">SQL语句或存储过程名</param>
//        /// <param name="cmdParms">MyMySqlCommand参数数组</param>
//        /// <returns>返回受引响的记录行数</returns>
//        public int ExecuteNonQuery(DbTransaction trans, CommandType cmdType, string cmdText, params IDataParameter[] cmdParms)
//        {
//            using (MySqlCommand cmd = new MySqlCommand())
//            {
//                PrepareCommand(cmd, trans, cmdType, cmdText, cmdParms);
//                try
//                {
//                    int val = cmd.ExecuteNonQuery();
//                    cmd.Parameters.Clear();
//                    return val;
//                }
//                catch (Exception ex)
//                {
//                    throw ex;
//                }
//            }
//        }

//        #endregion ExecuteNonQuery

//        #region ExecuteDataSet

//        /// <summary>
//        /// 适合查询操作 返回DataTable
//        /// </summary>
//        /// <param name="cmdType">命令类型，可以选择：(stored procedure, text)</param>
//        /// <param name="cmdText">sql语句或存储过程</param>
//        /// <param name="commandParameters">参数</param>
//        /// <returns></returns>
//        public DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params IDataParameter[] commandParameters)
//        {
//            using (MySqlCommand cmd = new MySqlCommand())
//            {
//                PrepareCommand(cmd, null, cmdType, cmdText, commandParameters);
//                MySqlDataAdapter dad = new MySqlDataAdapter(cmd);
//                DataSet ds = new DataSet();
//                dad.Fill(ds);
//                //cmd.Connection.Close();
//                //cmd.Connection.Dispose();
//                return ds;
//            }
//        }

//        #endregion ExecuteDataSet

//        #region ExecuteReader
//        /// <summary>
//        /// 调用存储过程，获取MySqlDataReader类型结果集
//        /// </summary>
//        /// <param name="cmdType">命令类型，可以选择：(stored procedure, text)</param>
//        /// <param name="cmdText">存储过程名</param>
//        /// <param name="commandParameters">参数集合</param>
//        /// <returns></returns>
//        public IDataReader ExecuteReader(CommandType cmdType, string cmdText, params IDataParameter[] commandParameters)
//        {
//            using (MySqlCommand cmd = new MySqlCommand())
//            {
//                try
//                {
//                    PrepareCommand(cmd, null, cmdType, cmdText, commandParameters);
//                    MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
//                    cmd.Parameters.Clear();
//                    //cmd.Connection.Close();
//                    //cmd.Connection.Dispose();
//                    return rdr;
//                }
//                catch (Exception ex)
//                {
//                    throw ex;
//                }
//            }
//        }


//        #endregion ExecuteReader

//        #region ExecuteScalar
//        /// <summary>
//        /// 返回object类型的结果集中的第一个单元格的内容
//        /// </summary>
//        /// <param name="cmdType">命令类型，可以选择：(stored procedure, text)</param>
//        /// <param name="cmdText">存储过程名</param>
//        /// <param name="commandParameters">参数集合</param>
//        /// <returns></returns>
//        public object ExecuteScalar(CommandType cmdType, string cmdText, params IDataParameter[] commandParameters)
//        {
//            MySqlCommand cmd = new MySqlCommand();

//            PrepareCommand(cmd, null, cmdType, cmdText, commandParameters);
//            object val = cmd.ExecuteScalar();
//            cmd.Parameters.Clear();
//            cmd.Connection.Close();
//            cmd.Connection.Dispose();
//            return val;

//        }

//        #endregion ExecuteScalar


//        /// <summary>
//        /// 为即将执行Command对象，添加相应的属性和参数，可以理解为实例化Command对象
//        /// </summary>
//        /// <param name="cmd">MySqlCommand对象</param>
//        /// <param name="trans">SqlTransaction对象</param>
//        /// <param name="cmdType">命令类型</param>
//        /// <param name="cmdText">执行的sql或存储过程名</param>
//        /// <param name="cmdParms">Command对象使用的参数集合</param>
//        private void PrepareCommand(IDbCommand cmd, DbTransaction trans, CommandType cmdType, string cmdText, params IDataParameter[] cmdParms)
//        {

//            cmd.Connection = Connection;
//            cmd.CommandText = cmdText;

//            if (trans != null)
//                cmd.Transaction = trans;

//            cmd.CommandType = cmdType;

//            if (cmdParms != null)
//            {
//                foreach (IDataParameter parm in cmdParms)
//                    cmd.Parameters.Add(parm);
//            }
//        }

//        private IDbConnection _connection = null;

//        public IDbConnection Connection
//        {
//            get
//            {
//                if (_connection == null || _connection.State == ConnectionState.Broken)
//                {
//                    _connection = CreateDbConnection();

//                }
//                if (_connection.State == ConnectionState.Closed)
//                {
//                    try
//                    {
//                        _connection.Open();
//                    }
//                    catch (Exception ex)
//                    {
//                        throw ex;
//                    }
//                }
//                return _connection;
//            }
//            set { _connection = value; }
//        }

//        public IDbConnection CreateDbConnection()
//        {
//            DbConnection con = new MySqlConnection(connectionString);

//            return con;
//        }


//    }
//}

